package leecode.array.数组其他问题;

/**
 * @author wangxi created on 2021/6/13 22:29
 * @version v1.0
 * https://leetcode-cn.com/problems/single-number-ii/
 *
 * 给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。
 * 请你找出并返回那个只出现了一次的元素。
 *
 * 解法可以上升为通用题解：除某个元素仅出现 一次 外，其余每个元素都恰出现 k 次
 */
public class SingleNumberII {


    // 来源于nowcoder
    public int foundOnceNumber (int[] nums, int k) {
        // write code here
        if (nums == null || nums.length <= 0) {
            return 0;
        }
        int res = 0;
        for (int i = 0; i < 32; i++) {
            int temp = 0;
            for (int j = 0; j < nums.length; j++) {
                temp = temp + ((nums[j] >> i) & 1);
            }
            // 出现k次的元素第i位相加的和 % k 结果一定为0，只有只出现一次的元素不为0
            if (temp % k != 0) {
                res = res | (1 << i);
            }
        }
        return res;

    }
}
